/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.clinicariobamba.Controladores;

import com.clinicariobamba.ReglasNegocio.Clases.Paciente;
import com.clinicariobamba.ReglasNegocio.Clases.ProfesionalSalud;
import com.clinicariobamba.ReglasNegocio.Clases.Usuario;
import com.clinicariobamba.ReglasNegocio.Funciones.FuncionesUsuario;
import java.awt.event.ActionEvent;
import java.io.Serializable;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import org.primefaces.context.DefaultRequestContext;

/**
 *
 * @author xavier
 */
@ManagedBean
@SessionScoped
public class LoginController implements Serializable {

    private static final long serialVersionUID = 6529685098267757690L;

    public static HttpSession sesion;

    private String usuario, contraseña, nombre, apellido;
    private boolean isMedico;
    private boolean isAdministrador;

    public LoginController() {
        isAdministrador = false;
    }

    public void setIsAdministrador(boolean isAdministrador) {
        this.isAdministrador = isAdministrador;
    }

    public void setIsMedico(boolean isMedico) {
        this.isMedico = isMedico;
        this.isAdministrador = false;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public void setContraseña(String contraseña) {
        this.contraseña = contraseña;
    }

    public String getUsuario() {
        return usuario;
    }

    public String getContraseña() {
        return contraseña;
    }

    public String getNombre() {
        return nombre;
    }

    public String getApellido() {
        return apellido;
    }

    public void login() {
        try {
            sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(true);
            FacesMessage msg;
            if (isAdministrador) {
                Usuario user = new Usuario();
                user.setIdUsuario(usuario);
                user.setContrasena(contraseña);
                user = FuncionesUsuario.login(user);
                if (user != null) {
                    sesion.setAttribute("user", user);
                    sesion.setAttribute("tusuario", "A");
                    nombre = user.getNombres();
                    apellido = user.getApellidos();
                    FacesContext.getCurrentInstance().getExternalContext().redirect(
                            FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
                            + "/faces/Administracion/Administrador.xhtml");
                } else {
                    sesion.setAttribute("user", null);
                    msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error de Autenticación", "Credenciales Incorrectas");
                    FacesContext.getCurrentInstance().addMessage(null, msg);
                }
                return;
            }
            if (isMedico) {
                ProfesionalSalud pf = new ProfesionalSalud();
                pf.setCi(usuario);
                pf.setContrasena(contraseña);
                pf = FuncionesUsuario.login(pf);
                if (pf != null) {
                    sesion.setAttribute("user", pf);
                    sesion.setAttribute("tusuario", "M");
                    nombre = pf.getNombres();
                    apellido = pf.getApellidos();
                    FacesContext.getCurrentInstance().getExternalContext().redirect(
                            FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
                            + "/faces/Profesional_Salud/Profesional_Salud.xhtml");
                } else {
                    sesion.setAttribute("user", null);
                    msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error de Autenticación", "Credenciales Incorrectas");
                    FacesContext.getCurrentInstance().addMessage(null, msg);
                }
            } else {
                Paciente p = new Paciente();
                p.setCi(usuario);
                p.setContrasena(contraseña);
                p = FuncionesUsuario.login(p);
                if (p != null) {
                    sesion.setAttribute("user", p);
                    sesion.setAttribute("tusuario", "P");
                    nombre = p.getNombres();
                    apellido = p.getApellidos();
                    FacesContext.getCurrentInstance().getExternalContext().redirect(
                            FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
                            + "/faces/Paciente/Paciente.xhtml");
                    msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Bienvenido", p.getNombres() + " " + p.getApellidos());
                    FacesContext.getCurrentInstance().addMessage(null, msg);
                } else {
                    sesion.setAttribute("user", null);
                    msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Error de Autenticación", "Credenciales Incorrectas");
                    FacesContext.getCurrentInstance().addMessage(null, msg);
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Alerta!", e.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            DefaultRequestContext.getCurrentInstance().execute("wdlgLoginMedico.hide()");
        }
    }

    public void cierre(ActionEvent actionEvent) {
        try {
            sesion.setAttribute("user", null);
            sesion = (HttpSession) FacesContext.getCurrentInstance().getExternalContext().getSession(false);
            sesion.invalidate();
            FacesContext.getCurrentInstance().getExternalContext().redirect(
                    FacesContext.getCurrentInstance().getExternalContext().getRequestContextPath()
                    + "/faces/login.xhtml");

        } catch (Exception e) {
            System.out.println(e.getMessage());
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR,
                    "Alerta!", e.getMessage());
            FacesContext.getCurrentInstance().addMessage(null, message);
            DefaultRequestContext.getCurrentInstance().execute("wdlgLoginMedico.hide()");
        }

    }

}
